package com.ruoyi.vstac.service.impl;

import java.io.IOException;
import java.util.List;

import ch.qos.logback.core.util.FileUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.vstac.mapper.VideoMapper;
import com.ruoyi.vstac.domain.Video;
import com.ruoyi.vstac.service.IVideoService;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * 作品视频Service业务层处理
 * 
 * @author kingner
 * @date 2024-07-08
 */
@Service
public class VideoServiceImpl implements IVideoService 
{
    @Resource
    private VideoMapper videoMapper;

    /**
     * 查询作品视频
     * 
     * @param videoId 作品视频主键
     * @return 作品视频
     */
    @Override
    public Video selectVideoByVideoId(int videoId)
    {
        return videoMapper.selectVideoByVideoId(videoId);
    }


    public List<Video> selectVideosByEntryId(int entryId){
        return videoMapper.selectVideosByEntryId(entryId);
    }

    /**
     * 查询作品视频列表
     * 
     * @param video 作品视频
     * @return 作品视频
     */
    @Override
    public List<Video> selectVideoList(Video video)
    {
        return videoMapper.selectVideoList(video);
    }

    /**
     * 新增作品视频
     * 
     * @param file 作品视频
     * @return 结果
     */
    @Override
    public int insertVideo(MultipartFile file, int entryId) throws IOException {

        //设置视频参数
        Video video = new Video();
        video.setVideoName(file.getName());
        video.setEntryId(entryId);
        video.setCreateTime(DateUtils.getNowDate());

        //获取上传地址并上传视频
        String path = RuoYiConfig.getUploadPath();
        String name = FileUploadUtils.upload(path, file);
        video.setVideoPath(name);

        return videoMapper.insertVideo(video);
    }

    /**
     * 修改作品视频
     * 
     * @param file 作品视频
     * @return 结果
     */
    @Override
    public int updateVideo(MultipartFile file, int videoId) throws IOException {
        //  通过id获取视频地址，删除视频
        Video video = videoMapper.selectVideoByVideoId(videoId);
        FileUtils.deleteFile(video.getVideoPath());

        // 获取上传地址并上传视频
        String path = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), file);

        //更新视频信息
        video.setVideoPath(path);
        video.setUpdateTime(DateUtils.getNowDate());

        // 执行更新数据库操作
        return videoMapper.updateVideo(video);
    }

    /**
     * 批量删除作品视频
     * 
     * @param videoIds 需要删除的作品视频主键
     * @return 结果
     */
    @Override
    public int deleteVideoByVideoIds(int[] videoIds)
    {
        // 获取要删除的视频信息
        List<Video> videos = videoMapper.selectVideoByIds(videoIds);
        for (Video video : videos) {
            // 删除本地视频
            FileUtils.deleteFile(video.getVideoPath());
        }

        // 执行删除数据库操作
        return videoMapper.deleteVideoByVideoIds(videoIds);
    }

    /**
     * 删除作品视频信息
     * 
     * @param videoId 作品视频主键
     * @return 结果
     */
    @Override
    public int deleteVideoByVideoId(int videoId)
    {
        //  通过id获取视频地址，删除视频
        Video video = videoMapper.selectVideoByVideoId(videoId);
        FileUtils.deleteFile(video.getVideoPath());

        // 执行删除数据库操作
        return videoMapper.deleteVideoByVideoId(videoId);
    }
}
